package com.leetcode.offer.chapter5;

import java.util.LinkedList;
import java.util.Queue;

/**
 * @author Dennis Li
 * @date 2020/8/1 21:06
 */
public class lengthOfLongestSubstring_48 {

    public int lengthOfLongestSubstring(String s) {
        // 用队列来表示滑动窗口
        Queue<Character> queue = new LinkedList<>();
        // 用一个boolean数组来表示字符是否出现过
        // 只有小写或者大写 -- 26
        // 所有ASICII字符 -- 256
        boolean[] showed = new boolean[256];
        char[] array = s.toCharArray();
        int max = 0;
        // 题目要求是子串，也就是连续的，那么可以直接用滑动窗口来做
        for (char c : array) {
            // 当队列中存在字符c的时候
            while (showed[c]) {
                // 一直执行出队，直到c不再出现为止
                char poll = queue.poll();
                showed[poll] = false;
            }
            queue.offer(c);
            showed[c] = true;
            // 一直更新队列的最大长度
            max = Math.max(queue.size(), max);
        }
        return max;
    }



}
